package model;

public class Batalla {

	/**
	 * @param args
	 */

	private static Batalla batalla = null;

	private ZonaDeBatalla lugarDeBatalla;
	private Unidad atacante;
	private Unidad defensor;
	private Unidad ganador;

	private Batalla(ZonaDeBatalla zona) {
		this.lugarDeBatalla = zona;
	}

	public Unidad getAtacante() {
		return atacante;
	}

	public void setAtacante(Unidad atacante) {
		this.atacante = atacante;
	}

	public Unidad getDefensor() {
		return defensor;
	}

	public void setDefensor(Unidad defensor) {
		this.defensor = defensor;
	}

	public Unidad getGanador() {
		return ganador;
	}

	public void setGanador(Unidad ganador) {
		this.ganador = ganador;
	}

	public ZonaDeBatalla getLugarDeBatalla() {
		return lugarDeBatalla;
	}

	public void setLugarDeBatalla(ZonaDeBatalla lugarDeBatalla) {
		this.lugarDeBatalla = lugarDeBatalla;
	}

	public static Batalla getInstance(ZonaDeBatalla zona) {
		if (batalla == null) {
			batalla = new Batalla(zona);
		}

		return batalla;
	}

	private double calculoDeProbabilidadDePeleaGanada() {
		return this.getAtacante().getNivel()
				/ (this.getAtacante().getNivel() + this.getDefensor()
						.getNivel());
	}

	public void comenzarPelea(Unidad atacante, Unidad defensor) {

		double random = Math.random();// generamos un numero al azar entre 0 y 1
		// TODO No se si me gusta mucho este método, por el momento solo safa.
		if (random < this.calculoDeProbabilidadDePeleaGanada()) {
			this.getLugarDeBatalla().asignarAGanadorDeBatalla(
					this.getDefensor());
			this.getDefensor().sumarCombatesGanadosyAumentarNivel();
			this.getAtacante().getBando().generarUnidad();

		} else {
			this.getLugarDeBatalla().asignarAGanadorDeBatalla(
					this.getAtacante());
			this.getAtacante().sumarCombatesGanadosyAumentarNivel();
		}

		// TODO El ganador de la batalla seguirá su camino y el perdedor si
		// tiene nivel mayor a 1 se regenerará en el castillo.
	}


}
